﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sinacor.UI.Bovespa.ImportacaoExportacao.Communication.Translator.ModelToProcessEntity
{
    public class ImportacaoDistribuicao
    {
        public Process.Bovespa.Distribuicao.ProcessEntity.Parameter.FiltroImportacaoDistribuicao ToFiltroImportacaoDistribuicao(Model.Parameter.FiltroImportacaoDistribuicao from)
        {
            Process.Bovespa.Distribuicao.ProcessEntity.Parameter.FiltroImportacaoDistribuicao to = null;

            if (from != null)
            {
                to = new Process.Bovespa.Distribuicao.ProcessEntity.Parameter.FiltroImportacaoDistribuicao();

                to.CalcularAcrescimoDecrescimo = from.CalcularAcrescimoDecrescimo;
                to.NomeArquivo = from.NomeArquivo;

                if (from.TipoDistribuicao.HasValue)
                {
                    switch (from.TipoDistribuicao.Value)
                    {
                        case Model.Enum.TipoFormaDistribuicao.Apelido:
                            to.TipoDistribuicao = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoFormaDistribuicao.Apelido;
                            break;
                        case Model.Enum.TipoFormaDistribuicao.Cliente:
                            to.TipoDistribuicao = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoFormaDistribuicao.Cliente;
                            break;
                    }
                }

                if (from.TipoDistribuicaoPrecoMedio.HasValue)
                {
                    switch (from.TipoDistribuicaoPrecoMedio.Value)
                    {
                        case Model.Enum.TipoDistribuicaoPrecoMedio.Volume:
                            to.TipoDistribuicaoPrecoMedio = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoDistribuicaoPrecoMedio.Volume;
                            break;
                        case Model.Enum.TipoDistribuicaoPrecoMedio.Quantidade:
                            to.TipoDistribuicaoPrecoMedio = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoDistribuicaoPrecoMedio.Quantidade;
                            break;
                        case Model.Enum.TipoDistribuicaoPrecoMedio.Percentual:
                            to.TipoDistribuicaoPrecoMedio = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoDistribuicaoPrecoMedio.Percentual;
                            break;
                    }
                }

                switch (from.TipoFormatoArquivo)
                {
                    case Model.Enum.TipoFormatoArquivo.TXT:
                        to.TipoFormatoArquivo = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoFormatoArquivo.TXT;
                        break;
                    case Model.Enum.TipoFormatoArquivo.XML:
                        to.TipoFormatoArquivo = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoFormatoArquivo.XML;
                        break;
                }
            }

            return to;
        }

        public Process.Bovespa.Distribuicao.ProcessEntity.Parameter.FiltroProcessamentoDistribuicao ToFiltroProcessamentoDistribuicao(Model.Parameter.FiltroProcessamentoDistribuicao from)
        {
            Process.Bovespa.Distribuicao.ProcessEntity.Parameter.FiltroProcessamentoDistribuicao to = null;

            if (from != null)
            {
                to = new Process.Bovespa.Distribuicao.ProcessEntity.Parameter.FiltroProcessamentoDistribuicao();
                to.CalcularAcrescimoDecrescimo = from.CalcularAcrescimoDecrescimo;
                to.DataMovimento = from.DataMovimento;
                to.Header = ToHeader(from.Header);
                to.NomeArquivo = from.NomeArquivo;

                if (from.TipoDistribuicao.HasValue)
                {
                    switch (from.TipoDistribuicao.Value)
                    {
                        case Model.Enum.TipoFormaDistribuicao.Apelido:
                            to.TipoDistribuicao = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoFormaDistribuicao.Apelido;
                            break;
                        case Model.Enum.TipoFormaDistribuicao.Cliente:
                            to.TipoDistribuicao = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoFormaDistribuicao.Cliente;
                            break;
                    }
                }

                if (from.TipoDistribuicaoPrecoMedio.HasValue)
                {
                    switch (from.TipoDistribuicaoPrecoMedio.Value)
                    {
                        case Model.Enum.TipoDistribuicaoPrecoMedio.Volume:
                            to.TipoDistribuicaoPrecoMedio = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoDistribuicaoPrecoMedio.Volume;
                            break;
                        case Model.Enum.TipoDistribuicaoPrecoMedio.Quantidade:
                            to.TipoDistribuicaoPrecoMedio = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoDistribuicaoPrecoMedio.Quantidade;
                            break;
                        case Model.Enum.TipoDistribuicaoPrecoMedio.Percentual:
                            to.TipoDistribuicaoPrecoMedio = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoDistribuicaoPrecoMedio.Percentual;
                            break;
                    }
                }

                switch (from.TipoFormatoArquivo)
                {
                    case Model.Enum.TipoFormatoArquivo.TXT:
                        to.TipoFormatoArquivo = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoFormatoArquivo.TXT;
                        break;
                    case Model.Enum.TipoFormatoArquivo.XML:
                        to.TipoFormatoArquivo = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoFormatoArquivo.XML;
                        break;
                }
            }

            return to;
        }

        public Process.Bovespa.Distribuicao.ProcessEntity.DistribuicaoHeader ToHeader(Model.DistribuicaoHeader from)
        {
            Process.Bovespa.Distribuicao.ProcessEntity.DistribuicaoHeader to = null;

            if (from != null)
            {
                to = new Process.Bovespa.Distribuicao.ProcessEntity.DistribuicaoHeader();

                to.CodigoUsuario = from.CodigoUsuario;
                to.DataPregao = from.DataPregao;
                to.NomeArquivo = from.NomeArquivo;
                to.Reserva = from.Reserva;

                switch (from.TipoDistribuicao.Value)
                {
                    case Model.Enum.TipoDistribuicao.Percentual:
                        to.TipoDistribuicao = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoDistribuicao.Percentual;
                        break;
                    case Model.Enum.TipoDistribuicao.PrecoDigitadoOrdem:
                        to.TipoDistribuicao = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoDistribuicao.PrecoDigitadoOrdem;
                        break;
                    case Model.Enum.TipoDistribuicao.PrecoMedioDigitado:
                        to.TipoDistribuicao = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoDistribuicao.PrecoMedioDigitado;
                        break;
                    case Model.Enum.TipoDistribuicao.PrecoMedioLote:
                        to.TipoDistribuicao = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoDistribuicao.PrecoMedioLote;
                        break;
                    case Model.Enum.TipoDistribuicao.PrecoMedioOrdem:
                        to.TipoDistribuicao = Process.Bovespa.Distribuicao.ProcessEntity.Enum.TipoDistribuicao.PrecoMedioOrdem;
                        break;
                }

                to.TipoRegistro = from.TipoRegistro;
            }

            return to;
        }
    }
}
